
import {reqGetCode,reqUserRegister,reqUserLogin,reqUserInfo,reqLogout} from '@/api';
import {setToken,getToken,removeToken} from '@/utils/token'
// 登录注册模块
const state = {
code:'',
// 刚开始 没有本地存储 相当于none  
// 下次再刷新 本地存储有值 直接赋值了 所以刷新也保持 持久化存储
token:getToken(),
userInfo:{}
}
const mutations = {
  GETCODE(state,code){
  state.code=code
  },
  USERLOGIN(state,token){
      state.token = token
  },
  GETUSERINFO(state,userInfo){
      state.userInfo = userInfo;
  },
//   清除本地数据
CLEAR(state){
    // 把仓库中相关用户信息清空
    state.token='';
    state.userInfo={};
    // 本地存储清空
    removeToken()
}

}
const actions = {
    // 获取验证码  发请求所以commit占位 同时需要把手机号当参数传过去
//   获取验证码的这个接口 把验证码返回  但是正常情况下 后台把验证码发到用户手机上（省钱）

    async  getCode({commit},phone){
  let result = await reqGetCode(phone);
  console.log(result);
  if(result.code==200){
    commit('GETCODE',result.data)
    return 'ok'
}else{
    return Promise.reject(new Error('faile'));
}
    },
    // 用户注册
   async  userRegister({commit},user){
    
  let result = await reqUserRegister(user);
  console.log(result);
//   这需要一个成功和失败的回调
// 如果成功需要跳转   注册成功需要跳转到登录
     if(result.code==200){
         return 'ok';
     }else{
         return Promise.reject(new Error('faile'))
     }
  
    },
    // 登录业务【token】  token 令牌（作为标志）
  async userLogin({commit},data){
    let result =  await reqUserLogin(data);
    // 服务器下发token 用户唯一标识（uuid）
    // 将来经常通过带token找服务器要用户信息进行展示
    if(result.code==200){
        // 用户已经登录成功且获取到token
       commit('USERLOGIN',result.data.token); 
    //   持久化存储token
    // localStorage.setItem("TOKEN",result.data.token);
      setToken(result.data.token)
    return 'ok'
    }else{
        return  Promise.reject(new Error('faile'));
    }
    console.log(result);
    
   },
//    获取用户信息
async getUserInfo({commit}){
 let result = await reqUserInfo();
//  console.log(result);
  if(result.code==200){
    //   提交用户的信息
  commit('GETUSERINFO',result.data);
 return 'ok'
  }else{
    return Promise.reject(new Error('faile')) ; 
  }
},
// 退出登录
async userLogout({commit}){
    // 只是向服务器发起一次请求  通知服务器清除token
    let result =  await reqLogout()
    // action里面不能操作state 提交mutation修改state
    if(result.code==200){
        commit('CLEAR')
        return 'ok';
    }else{
       return Promise.reject(new Error('faile'));
    }
}

}
const getters = {}
export default{
    state,
    mutations,
    actions,
    getters

}